#include <vector>
#include <fstream>
#include <string>

using namespace std;

#pragma once
class SpecialInputClassTest
{

private:

	double *A;
	double *b;

	int size;
	int error = 0;

public:

	SpecialInputClassTest(){};
	SpecialInputClassTest(string fileNameA, string fileNameB) {

		fstream fin(fileNameA);

		if (!fin.is_open()) {
			error = -1;
			return;
		}

		fin >> size;
		
		A = (double*)malloc(sizeof(double)*size*size);
		b = (double*)malloc(sizeof(double)*size);

		if (A == nullptr || b == nullptr || size == 0) {
			return;
		}

		for (int i = 0; i < size; i++) {
			for (int j = 0; j < size; j++)
				fin >> A[i*size + j];
		}

		fin.close();
		fin.open(fileNameB);

		if (!fin.is_open()) {
			error = -1;
			return;
		}
		
		for (int i = 0; i < size; i++) {
			fin >> b[i];
		}

	};

	double* get_A() {
		return A;
	}
	double* get_b() {
		return b;
	}

	int get_size() {
		return size;
	}

	//int read_A(string fileName) {

	//	int sizef;
	//	fstream fin(fileName);

	//	if (!fin.is_open()) {
	//		return -1;
	//	}

	//	fin >> sizef;
	//	

	//	A = (double*)malloc(sizeof(double)*size*size);

	//	if (A == nullptr || sizef == 0) {
	//		return -1;
	//	}

	//	for (int i = 0; i < size; i++) {
	//		for (int j = 0; j < size; j++)
	//			fin >> A[i*size + j];
	//	}

	//	fin.close();

	//	size = sizef;

	//	return 1;

	//}

	//int read_b(string fileName) {

	//	fstream fin(fileName);
	//	fin.open(fileName);

	//	if (!fin.is_open()) {
	//		return -1;
	//	}

	//	b = (double*)malloc(sizeof(double)*size);

	//	if ( b == nullptr ) {
	//		return -1;
	//	}

	//	for (int i = 0; i < size; i++) {
	//		fin >> b[i];
	//	}

	//	return 1;

	//}
	
};

